
namespace bga
{

template< unsigned int N, typename T>
Tuple<N, T>::Tuple()
{
    for(unsigned int i = 0; i < N; i++)
    {
        this->arrayValues[i] = 0;
    }
}

template< unsigned int N, typename T>
Tuple<N, T>::Tuple(const Tuple< N, T >& tuple)
{
    for(unsigned int i = 0; i < N; i++)
    {
        this->arrayValues[i] = tuple[i];
    }
}

template< unsigned int N, typename T>
Tuple<N, T>::~Tuple()
{

}

template< unsigned int N, typename T>
void Tuple<N, T>::set(const Tuple< N, T >& tuple)
{
    for(unsigned int i = 0; i < N; i++)
    {
        this->arrayValues[i] = tuple[i];
    }
}

template< unsigned int N, typename T>
T& Tuple<N, T>::operator[](unsigned int index)
{
    return this->arrayValues[index];
}

template< unsigned int N, typename T>
const T& Tuple<N, T>::operator[](unsigned int index) const
{
    return this->arrayValues[index];
}

template< unsigned int N, typename T>
Tuple<N, T>& Tuple<N, T>::operator=(const Tuple< N, T >& tuple)
{
    for(unsigned int i = 0; i < N; i++)
    {
        this->arrayValues[i] = tuple[i];
    }
    return *this;
}

}
